package cn.iocoder.boot.domain.strategy.service.armory;

/**
 * @author Huangjun
 * @description 抽奖策略调度接口
 * 该接口定义了抽奖过程中的核心调度方法，用于根据策略配置随机选择一个奖品。
 *  它与IStrategyArmory配合工作，Armory负责数据准备，Dispatch负责数据使用。
 * @create 2025/11/3
 */
public interface IStrategyDispatch {
    /**
     * 装配抽奖策略
     *
     * @param strategyId 策略ID
     * @return 抽奖结果
     */
    Integer getRandomAwardId(Long strategyId);

    Integer getRandomAwardId(Long strategyId, String ruleWeightValue);

    /**
     * 获取抽奖策略装配的随机结果
     *
     * @param key = strategyId + _ + ruleWeightValue；
     * @return 抽奖结果
     */
    Integer getRandomAwardId(String key);

    /**
     * 根据策略ID和奖品ID，扣减奖品缓存库存
     *
     * @param strategyId 策略ID
     * @param awardId    奖品ID
     * @return 扣减结果
     */
    Boolean subtractionAwardStock(Long strategyId, Integer awardId);
}
